import cronParser from 'cron-parser'

/**
 * 验证Cron表达式是否有效
 * @param {string} cron - Cron表达式
 * @returns {boolean} 是否有效
 */
export function validateCronExpression(cron) {
  try {
    if (!cron || typeof cron !== 'string') return false
    
    // 简单验证格式
    const parts = cron.trim().split(/\s+/)
    if (parts.length < 6 || parts.length > 7) return false
    
    // 使用cron-parser验证
    cronParser.parseExpression(cron)
    return true
  } catch (error) {
    return false
  }
}

/**
 * 获取Cron表达式的描述信息
 * @param {string} cron - Cron表达式
 * @returns {string} 描述信息
 */
export function getCronDescription(cron) {
  try {
    if (!validateCronExpression(cron)) {
      return '无效的Cron表达式'
    }
    
    const parts = cron.trim().split(/\s+/)
    const [second, minute, hour, day, month, week, year] = parts
    
    let description = ''
    
    // 解析秒
    if (second === '*') {
      description += '每秒'
    } else if (second.startsWith('*/')) {
      description += `每${second.split('/')[1]}秒`
    } else {
      description += `第${second}秒`
    }
    
    // 解析分
    if (minute === '*') {
      description += '，每分'
    } else if (minute.startsWith('*/')) {
      description += `，每${minute.split('/')[1]}分`
    } else {
      description += `，第${minute}分`
    }
    
    // 解析时
    if (hour === '*') {
      description += '，每时'
    } else if (hour.startsWith('*/')) {
      description += `，每${hour.split('/')[1]}时`
    } else {
      description += `，第${hour}时`
    }
    
    // 解析日和周 (简单处理)
    if (day === '*' && week === '?') {
      description += '，每天'
    } else if (day !== '*' && week === '?') {
      description += `，每月第${day}天`
    } else if (day === '?' && week !== '*') {
      const weekMap = {
        '0': '日', '1': '一', '2': '二', '3': '三', 
        '4': '四', '5': '五', '6': '六', '7': '日'
      }
      description += `，每周${weekMap[week]}`
    }
    
    // 解析月
    if (month === '*') {
      description += '，每月'
    } else {
      description += `，每年第${month}月`
    }
    
    // 解析年
    if (year) {
      if (year === '*') {
        description += '，每年'
      } else {
        description += `，${year}年`
      }
    }
    
    return description + '执行'
  } catch (error) {
    return '无法解析Cron表达式'
  }
}

/**
 * 获取Cron表达式的下次执行时间
 * @param {string} cron - Cron表达式
 * @param {number} count - 获取的次数，默认1
 * @returns {Array<Date>} 下次执行时间数组
 */
export function getNextExecutionTimes(cron, count = 1) {
  try {
    if (!validateCronExpression(cron)) {
      return []
    }
    
    const interval = cronParser.parseExpression(cron)
    const times = []
    
    for (let i = 0; i < count; i++) {
      times.push(interval.next().toDate())
    }
    
    return times
  } catch (error) {
    return []
  }
}
</script>
